logo
menu

프로젝트 최적화 사전 개념 | 크롬 분석 툴 (라이트하우스, 퍼포먼스 등)

2023. 12. 26.

  • #최적화

웹 성능 최적화 관점

notion image
  • 로딩 성능
    • 서버에 있는 웹 페이지와 웹 페이지에 필요한 기타 리소스를 다운로드 할 때의 성능
    • HTML, JS, CSS, image 등 파일의 크기가 너무 크면 다운로드 하는데 오래 걸려 웹 페이지가 느리게 표시됨
    • 개선 방법은 다운로드 해야하는 리소스를 줄이거나 크기를 줄이는 것
      • 코드를 분활하여 다운로드 또는 리소스에 우선순위를 매겨 중요한 리소스 먼저 다운 받기
  • 렌더링 성능
    • 다운로드한 리소스를 가지고 화면을 그릴 때의 성능을 말함
      • 코드를 실행하여 화면에 보여 주는 과정
    • 렌더링 성능에 가장 큰 영향은 자바스크립트 코드
      • 얼마나 효율적으로 작성했는지에 따라 화면이 그려지는 속도인터랙션의 자연스러운 정도가 달라짐
    • 개선 방법은 다양한 방법이 있으며, 브라우저의 동작 원리나 프레임워크의 라이프사이클 등 웹 개발의 기본 지식이 필요

크롬 개발 툴

  • 네트워크 패널
    • 현재 웹 페이지에서 발생하는 모든 네트워크 트랙픽을 상세하게 알려줌
      어떤 리소스가 어느 시점에 로드되는지, 리소스 크기 등 알 수 있음
  • Performance 패널
    • 웹 페이지가 로드될 때, 실행되는 모든 작업을 보여줌
      • 리소스가 로드되는 타이밍
      • 브라우저의 메인 스레드에서 실행되는 JS 를 차트 형태로 볼 수 있음
      ⇒ 해당 패널을 통해 어떤 JS가 코드가 느린지 확인할 수 있음
  • Lighthouse 패널
    • 웹 사이트의 성능을 측정하고 개선 방향을 제시해 주는 툴
      • 성능 점수를 측정하고 개선 가이드를 확인하여 어떤 부분을 중점적으로 분석하고 최적화하는 알 수 있음
      이미지
      notion image
      notion image
webpack-bundle-analyzer
webpack 을 통해 번들링된 파일(라이브러리 등)의 구성 요소를 보여줌
→ 이 툴을 이용해 번들 파일 중 불필요한 코드가 어떤 코드이고 번들 파일 중 얼마나 차지하고 있는지 확인!
 

Lighthouse 구성 요소

💡
모든 최적화 포인트를 알아서(기억해서) 처리하면 좋겠지만 현실적으로 불가능. 그래서 Lighthouse 를 통해 도움을 받을 수 있음
notion image

Mode

  • Navigation
    • Lighthouse 의 기본 값, 초기 페이지 로딩 시 발생하는 성능 문제를 분석
  • Timespan
    • 사용자가 정의한시간 동안 발생한 성능 문제를 분석
  • Snapshot
    • 현재 상태의 성능 문제를 분석

Categories

  • Performance
    • 웹 페이지의 로딩 과정에서 발생하는 성능 문제를 분석
  • Accessibility
    • 서비스의 사용자 접근성 문제를 분석
  • Best practices
    • 웹 사이트의 보안 측면웹 개발의 최신 표준에 중점을 두고 분석
  • SEO
    • 검색 엔진에서 얼마나 잘 크롤링되고 검색 결과에 표시되는지 분석
  • Progressive Web App
    • 서비스 워커와 오프라인 동작 등, PWA와 관련된 문제를 분석

Device

  • 모바일을 선택하면 좀 더 느린 CPU 와 네트워크 환경 사용
  • Lighthouse 분석시 성능을 선택할 수 있음!?

검사 결과 : Web Vitals

💡
검사 환경에 따라 Lighthouse 검사 결과가 달라질 수 있음
notion image
  • 최종 점수인 Performance 와 여섯 가지 지표 METRICS 로 구성

FCP (First Contentful Paint)

  • 페이지가 로드될 때 브라우저가 DOM 콘텐츠의 첫 번째부분을 렌더링 하는 데걸리는 시간에 관한 지표
  • 총점을 계산할 때 10% 가중치
→ 예제에서는 페이지에 진입하여 첫 번째 콘텐츠가 뜨기까지 1.4 초 걸림

Speed Index (SI)

notion image
  • 페이지 로드 중에 콘텐츠가 시각적으로 표시되는 속도를 나타내는 지표
  • 총점을 계산할 때 10% 가중치
→ A, B 모두 4초가 걸렸지만, A 가 B 보다 일부 콘텐츠가 먼저 떴기에 A 가 B보다 더 빨리 로드된 것으로 간주하여 더 높은 점수를 받음

Lagest Contentful Paint (LCP)

  • 페이지가 로드될 때 화면 내에 있는 가장 큰 이미지나 텍스트 요소가 렌더링되기까지 걸리는 시간의 지표
  • 총점을 계산할 때 25% 가중치
→ 페이지 진입 후 가장 큰 콘텐츠가 뜨기까지 2.1 초가 소요

Time to Interactive (TTI)

  • 사용자가 페이지와 상호 작용이 가능한 시점까지는 걸리는 시간의 지표
    • 화면이 그려지더라도 JS 코드가 실행되지 않으면 클릭 등 상호작용이 일어나지 않는데 상호작용이 가능한 시간을 의미
  • 총점을 계산할 때 10% 가중치

Total Blocking Time (TBT)

  • 페이지가 클릭, 키보드 입력 등의 사용자 입력에 응답하지 않도록 차단된 시간을 나타내는 지표
    • 💡 FCP 와 TTI 사이의 시간 동안 일어나며 메인 스레드를 독점하여 다른 동작을 방해하는 작업에 걸린 시간의 총합
      ⇒ 💡 FCP 와 TTI 사이의 시간 ??
  • 총점을 계산할 때 30% 가중치

Cumulative Layout Shift (CLS)

  • 페이지 로드 과정에서 발생하는 예기치 못한 레이아웃 이동을 측정한 지표
    • ❓ 레이아웃 이동이란?
      💡 화면상에서 요소의 위치나 크기가 순간적으로 변하는 것!
  • 총점을 계산할 때 15% 가중치
 

검사 결과 - OPPORTUNITIES, DIAGNOSTICS

💡
웹 페이지의 문제점과 해결 방안, 문제를 해결함으로써 얻을 수 있는 이점을 알려줌
notion image
  • OPPORTUNITIES
    • 페이지를 더욱 빨리 로드하는데 잠재적으로 도움되는 제안을 나열
  • DIAGNOSTICS
    • 로드 속도와 직접적인 관계는 없지만, 성능과 관련된 기타 정보를 보여줌

검사 결과 - OPPORTUNITIES, DIAGNOSTICS

notion image
  • CPU throttling : CPU 성능 제한
    • 1x : 제한 없음. 데스크탑
    • 4x : 모바일 선택시.
  • Network throttling : 네트워크 속도 제한
 

Performance 패널

💡
P.26 ~ performance 패널은 JS 실행 시간이 긴 경우 보면 좋은거 같다
사전 정보? preformance 을 봐야하는 과정?
Lighthouse의 Diagnostics 섹션을 살펴봄 - 'Reduce Javascript execution time' 항목을 살펴봄
notion image
1.chunk.js 파일의 실행이 오래걸림
느린 작업을 식별하기 위해 Performance 탭을 살펴봄
notion image
💡
View Original Trace로 이동 시 상세 정보가 누락된 경우도 있음. 퍼포먼스 패널로 이동해서 새로고침으로 분석 서비스 상태를 좀 더 상세히 보려면 네트워크 설정을 Fast 3G로 설정
notion image

1. CPU 차트, Network 차트, 스크린샷

notion image

CPU 차트

  • 시간에 따라 CPU 가 어떤 작업에 리소스를 사용하고 있는지 비율로 보여줌
  • 자바스크립트 실행 작업은 노락색
    • 렌더링/레이아웃 작업은 보라색
      페인팅 작업은 초록색
      기타 시스템 작업은 회색
      빨간색 선은 병목이 발생하는 지점
      ⇒ 특정 작업이 메인스레드를 오랫동안 잡아 두고 있다는 의미
⇒ 해당 정보를 통해 어느 타이밍에 어떤 작업이 주로 이루어지는지 파악

네트워크 차트

  • CPU 차트 밑에 막대 형태로 표시
  • 네트워크 상태를 보여줌
    • 위쪽 진한 막대는 우선순위가 높은 네트워크 리소스
      아래쪽의 옅은 막대는 우선순위가 낮은 테으워크 리소스를 나타냄

스크릿샷 리스트

  • 서비스가 로드되는 과정을 보여줌

2. Network 타임라인

notion image
  • 1의 네트워크 패널과 유사하게 서비스 로드 과정에서의 네트워크 요청 시간 순서를 보여줌
  • 왼쪽 회색 선 :초기 연결 시간
    • 막대의 옅은 색 영역 : 요청을 보내 시점부터 응답을 기다리는 시점까지의 시간 (TTFB, Time to Fisrt Byte)
      막대의 짙은 색 영역 : 콘텐츠 다운로드 시간
      오른쪽 회색 선 : 해당 요청에 대한 메인 스레드의 작업 시간

3. Frames, Timings, Main

Frames 섹션

notion image
  • 화면의 변화가 있을 때마다 스크린 샷을 찍어 보여줌

Timings 섹션

notion image
  • User Timing API 를 통해 기록된 정보를 기록
⇒ 위 예제는 리액트에서 각 컴포넌트의 렌더링 시간을 측정한 시간을 막대로 보여줌.
**React 17 이후로 User Timing API 코드는 지원이 종료됨

Main 섹션

notion image
  • 브라우저의 메인 스레드에서 실행되는 작업을 플레임 차트로 보여줌
⇒ 💡 어떤 작업이 오래 걸리는지 파악함
→ 이 외에도 Raster, GPU 등이 있음

4. 하단 탭

notion image

Summary 탭

  • 선택 영역에서 발생한 작업 시간의 총합과 각 작업이 차지하는 비중을 보여줌

Bottom Up 탭

  • 가장 최하위에 있는 작업부터 상위 작업까지 역순으로 보여 줌

Call Tree

  • Bottom up 과 반대로 가장 상위 작업부터 하위 작업순으로 작업 내용을 보여줌
  • Bottom Up 과 비슷한데 스택 대신 작업의 순서 및 의존성을 고려해서 계층별로 보여줌?

Event Log

  • 발생한 이벤트를 보여줌
    • Loading
    • Experience Scripting
      • → 얘가 DOM 만드는건가? 모르겠다
    • Rendering
      • 렌더트리와 레이아웃
    • Painting
      • 컴포지트 + 페인트